/*
 * 演示设置权限 - 演示设置权限定义
 * 
 * 主要功能：
 * - 定义演示设置相关的权限
 * - 提供权限管理功能
 * - 演示权限系统的使用
 * - 支持权限控制
 */

using OrchardCore.Security.Permissions;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Lombiq.TrainingDemo.Permissions;

/// <summary>
/// 演示设置权限 - 定义演示设置相关的权限
/// 
/// 主要用途：
/// - 定义演示设置相关的权限
 //* - 提供权限管理功能
 //* - 演示权限系统的使用
 //* - 支持权限控制
 //* 
 //* 使用场景：
/// - 控制演示设置的访问权限
/// - 管理用户对设置的操作权限
/// - 支持细粒度的权限控制
/// - 提供安全的设置管理
/// 
/// 设计原因：
/// - 为演示设置提供权限控制
/// - 实现安全的设置管理
/// - 支持用户权限管理
/// - 提供可扩展的权限系统
/// 
/// 设计模式：
/// - 权限模式：实现IPermissionProvider接口
/// - 提供程序模式：提供权限定义
/// - 分组模式：使用权限组组织权限
/// - 描述模式：提供权限描述信息
/// </summary>
// 这个类实现了IPermissionProvider接口，用于定义演示设置相关的权限。
// 它提供了权限定义、默认角色分配等功能。
public sealed class DemoSettingsPermissions : IPermissionProvider
{
    /// <summary>
    /// 管理演示设置权限 - 允许用户管理演示设置
    /// 
    /// 功能说明：
    /// - 允许用户查看和编辑演示设置
    /// - 控制设置页面的访问权限
    /// - 支持设置的管理操作
    /// - 提供权限描述信息
    /// 
    /// 权限特性：
    /// - 名称：ManageDemoSettings
    /// - 描述：管理演示设置
    /// - 类别：演示设置
    /// - 级别：管理级别
    /// </summary>
    public static readonly Permission ManageDemoSettings = new(
        nameof(ManageDemoSettings),
        "Manage demo settings.");

    /// <summary>
    /// 获取权限异步方法 - 返回演示设置相关的所有权限
    /// 
    /// 功能说明：
    /// - 返回所有演示设置权限
    /// - 支持权限管理界面
    /// - 提供权限列表
    /// - 支持权限分组
    /// 
    /// 权限列表：
    /// - ManageDemoSettings：管理演示设置
    /// </summary>
    /// <returns>权限列表任务</returns>
    public Task<IEnumerable<Permission>> GetPermissionsAsync() =>
        Task.FromResult(new[]
        {
            ManageDemoSettings,
        }
        .AsEnumerable());

    /// <summary>
    /// 获取默认角色权限 - 返回默认的角色权限分配
    /// 
    /// 功能说明：
    /// - 定义默认的角色权限分配
    /// - 支持权限的自动分配
    /// - 提供角色权限模板
    /// - 简化权限管理
    /// 
    /// 角色分配：
    /// - Administrator：管理员角色
    /// - 权限：ManageDemoSettings
    /// </summary>
    /// <returns>权限角色分配列表</returns>
    public IEnumerable<PermissionStereotype> GetDefaultStereotypes() =>
        [
            new PermissionStereotype
            {
                Name = "Administrator",
                Permissions = [ManageDemoSettings],
            },
        ];
}

// 下一站：PersonPermissions.cs
